package com.zhangxin.aiInterview.manager.xfapi.http;

import cn.hutool.http.HttpRequest;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**
 * 讯飞公共接口服务(根据简历成面试题-微信)
 */
@Component
public class WxGenerateInterviewQuestionApi {
    // 静态变量缓存 Prompt（仅初始化一次）
    private static final String SYSTEM_PROMPT;

    static {
        // 初始化 System Prompt
        SYSTEM_PROMPT = "你是一位面试出题专家，根据用户提供的面试公司和岗位，生成10道针对该公司该岗位的技术面试题及其答案。要求：\n" +
                "1. 每道题包含问题标题(title)和详细答案(answer)\n" +
                "2. 响应数据必须是严格JSON数组格式：[{\"title\":\"问题1\",\"answer\":\"答案1\"},{\"title\":\"问题2\",\"answer\":\"答案2\"},...]\n" +
                "3. 所有问题必须聚焦用户面试的岗位技术需求\n" +
                "4. 答案部分需专业、准确、包含关键技术要点\n" +
                "5. 绝对不要使用Markdown格式，只输出纯JSON数组\n" +
                "\n" +
                "示例输出：\n" +
                "[{\"title\":\"如何设计分布式系统保证高可用？\",\"answer\":\"常用方案：1. 多区域部署 2. 自动故障转移 3. 服务熔断机制 4. 健康检查+负载均衡\"},{\"title\":\"Kafka如何保证消息不丢失？\",\"answer\":\"三方面保证：1. Producer用ack=all机制 2. Broker配置复制因子 3. Consumer关闭自动提交改用手动位移管理\"}]\n" +
                "\n" +
                "请严格按以下要求生成：\n" +
                "- 生成10个完整问题及答案对\n" +
                "- 问题深度匹配目标岗位职级（如高级/初级）\n" +
                "- 答案需包含核心知识点和技术细节\n" +
                "- 使用专业术语保持技术严谨性";
    }

    @Value("${xunfei.apiPassword}")
    private String apiPassword;

    /**
     * 生成笔试题
     * @param position
     * @param company
     * @return
     */
    public String generateInterviewQuestion(String position, String company) {
        // 1. 请求地址和Headers
        String url = "https://spark-api-open.xf-yun.com/v1/chat/completions";

        // 2. 构造请求体（JSON）
        JSONObject requestBody = new JSONObject();
        requestBody.set("model", "generalv3.5");

        //构造用户prompt
        JSONArray messages = new JSONArray();
        messages.add(new JSONObject().set("role", "system").set("content", SYSTEM_PROMPT));
        messages.add(new JSONObject().set("role", "user").set("content", "笔试公司：" + company + "  笔试岗位：" + position));

        requestBody.set("messages", messages);
        requestBody.set("top_p", 0.8);

        // 3. 发送请求
        String jsonStr = HttpRequest.post(url)
                .header("Content-Type", "application/json")
                .header("Authorization", "Bearer " + apiPassword)
                .body(requestBody.toString())
                .execute()
                .body();
        JSONObject rootObj = JSONUtil.parseObj(jsonStr);
        return (String) rootObj.getByPath("choices[0].message.content");
    }
}
